//
//  BPStatusListViewModel.swift
//  BPWeiBo
//
//  Created by apple on 16/4/11.
//  Copyright © 2016年 apple. All rights reserved.

//把我们的网络请求,数据处理,和逻辑的问题都放在这个Viewmodel中,然后直接给控制器和view就行
import UIKit
import SVProgressHUD
class BPStatusListViewModel: NSObject {

    //创建的模型数组,用来接收网络请求获取的数据
    var homeInfoArr = [BPStatusCellViewModel]()
    
    //利用Viewmodel加载数据
    //MARK:加载数据
    func loadHomeinfoArr(isPulled isPulled:Bool,finished:(success: Bool) -> ()) {
        
        //获取token
        let tokenHome = BPUserInfoViewModel.sharedUserInfoViewModel.userInfo?.access_token
        //声明两个id,一个是since_id,(当我们传入这个参数的时候会返回新的微博,用于下拉刷新),和max_id(如果传入这个参数表示到时候会返回旧的微博用于上啦加载更多)
        //系统规定当你传入当前数组的最后一条记录,(max_id),就会返回就得数据,如果传入当前数组的第一个微博的id(since_id),就会给你新的数据
            var since_id:Int64 = 0
            var max_id:Int64 = 0
        
        
        //判断,如果传进去的ture就下拉刷新.如果传入的是false就是上拉加载
        if isPulled {
            //上拉加载,给max_id传进去一个值
            max_id = self.homeInfoArr.last?.statusListModel?.id ?? 0

        }else {

            //下拉刷新,给since_id传进去一个值
            since_id = self.homeInfoArr.first?.statusListModel?.id ?? 0
        }
        
        
        //请求数据
        BPAFNetworkingTool.sharedTools.loadHomeInfomation(tokenHome!,since_id: since_id,max_id: max_id) { (respondData, error) -> () in
            
            if error != nil {
                print(error)
                SVProgressHUD.showErrorWithStatus("数据解析错误")
                finished(success: false)
                return
            }
            
            //执行到这里表示解析正确
            //将获取到的数据转换成我们需要用到的字典
            guard let homeDic = respondData as? [String : AnyObject] else {
                SVProgressHUD.showErrorWithStatus("数据解析错误")
                finished(success: false)
                return
            }
            
            //执行到这里表示转换成字典成功
            //然后通过status这个字段来获取我们首页需要显示的内容
            guard let statusArr = homeDic["statuses"] as? [[String : AnyObject]] else {
                SVProgressHUD.showErrorWithStatus("数据解析错误")
                finished(success: false)
                return
            }
            
            //执行到这里表示转换成数组成功
            //声明一个可变的数组用来接收字典转模型
            var array = [BPStatusCellViewModel]()
            //遍历字典转模型
            for dic in statusArr {
                let s = BPStatusListView(dict: dic)
                let viewModel = BPStatusCellViewModel(status: s)
                
                //添加到数组中
                array.append(viewModel)
            }
            //执行到这里,表示我们的数组中加载数据成功
            
            //self.homeInfoArr = array
            
            //在这里进行判断,当isPulled是ture的时候就向上累加,如果是false就向下累加
            if isPulled {
                self.homeInfoArr = self.homeInfoArr + array
            }else {
                self.homeInfoArr = array + self.homeInfoArr
            }
            //当全部加载成功在返回数据
            finished(success: true)
            
        }
    }
}